package Pojo;

import java.util.List;
import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;

/** Classe Aluno 
* Classe aluno herda de Pessoa e faz relacionamentos com Notas, históricos e históricos turma
* @author Thiago de Sousa Silveira
*/

@Entity
public class Aluno extends Pessoa implements Serializable{
	/** Código do Aluno */
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
	private Integer id;
	
	/** Lista de Históricos*/
	@OneToMany(mappedBy="aluno")
        private List<Historico> historicos;
	
	/** Lista de Históricos Turma*/
	@OneToMany(mappedBy="aluno")
        private List<HistoricoTurma> historicoTurmas;
	
 	/** Lista de Notas*/
        @OneToMany(mappedBy="aluno")
        private List<Nota> notas;
	
        /**
         * Construtor exigido pelas annotations 
         */
        public Aluno(){
            
        }
        
        /**
	 * Construtor do Aluno sem relacionamentos com id
	 * @param id
	 * @param nome
	 * @param cpf
	 */
	public Aluno(Integer id, String nome, String cpf){
                this.setId(id);
		this.setNome(nome);
		this.setCpf(cpf);
	}
        
        
	/**
	 * Construtor do Aluno sem relacionamentos
	 * @param nome
	 * @param cpf
	 */
	public Aluno(String nome, String cpf){
		this.setNome(nome);
		this.setCpf(cpf);
	}
	
	/**
	 * Construtor do Aluno com relacionamentos
	 * @param id
	 * @param nome
	 * @param cpf
	 * @param historicos
	 * @param historicosTurmas
	 * @param notas
	 */
	public Aluno(String nome, String cpf, List<Historico> historicos, List<HistoricoTurma> historicosTurmas, List<Nota> notas){
		this(nome,cpf);
		this.setHistoricos(historicos);
		this.setHistoricoTurmas(historicoTurmas);
		this.setNotas(notas);
	}
	
	/**
	 * Sobrescrita do método toString
	 */
	@Override
	public String toString(){
		return(this.getId()+"\t"+this.getNome()+"\t"+this.getCpf()+"\n");
	}
	
	/**
	 * Getter de idAluno
	 * @return
	 */
	public int getId(){
		return(this.id);
	}
	
	/**
	 * Setter de idAluno
	 * @param id
	 */
	private void setId(Integer id){
		this.id = id;
	}
	
	/**
	 * Setter de Históricos
	 * @param historicos
	 */
	private void setHistoricos(List<Historico> historicos){
		this.historicos = historicos;
	}
	
	/**
	 * Setter de Notas
	 * @param nota
	 */
	private void setNotas(List<Nota> nota){
		this.notas = nota;
	}
	
	/**
	 * Setter de Historico Turmas
	 * @param historicoTurmas
	 */
	private void setHistoricoTurmas(List<HistoricoTurma> historicoTurmas){
		this.historicoTurmas = historicoTurmas;
	}
	
	/**
	 * Getter de Históricos
	 * @return
	 */
	public List<Historico> getHistoricos(){
		return(this.historicos);
	}
	
	/**
	 * Getter de Notas
	 * @return
	 */
	public List<Nota> getNotas(){
		return(this.notas);
	}
	
	/**
	 * Getter de Históricos Turmas
	 * @return
	 */
	public List<HistoricoTurma> getHistoricoTurmas(){
		return(this.historicoTurmas);
	}
}
